1464. Простое задание
Для заданного целого числа n
вычислите сумму всех целых чисел от 1 до n (включая 1 и n).
Вход. В каждой строке содержится
единственное целое число n (|n| ≤ 10000). Последняя строка
содержит 0 и не обрабатываться.
Выход. Для каждого значения n
выведите ответ в отдельной строке.
Пример
входа |
Пример
выхода |
1 10 0 |
1 55 |
РЕШЕНИЕ
циклы
Входные данные
содержат несколько тестов.
Входное значение
n может быть как
положительным, так и отрицательным. Для вычисления суммы воспользуемся формулой арифметической
прогрессии.
Для положительного
n сумма чисел от
1 до n равна (1 + n) * n / 2.
Для неположительного
n (отрицательного и 0) количество
чисел от 1 до n равно |n| + 2. Следовательно сумма
чисел от 1 до n равна (1 + n) * (|n| + 2) / 2.
Пример
Пусть n = -4. Количество чисел
от 1 до -4 равно |-4| + 2 = 6 (это числа
-4, -3, -2, -1, 0, 1). Сумма чисел от 1 до -4 равна
(1 + -4) * (|-4| + 2) / 2 = -3 * 6 / 2 = -9
Функция abs вычисляет модуль числа n.
long long abs(long long n)
{
return (n > 0) ? n : -n;
}
Основная часть программы.
Обрабатываем несколько тестов.
while (scanf("%lld", &n), n)
{
Вычисляем ответ для положительного
и для неположительного числа n.
if (n >= 1) res = (1 + n) * n / 2;
else res = (1 + n) * (abs(n) + 2) / 2;
Выводим ответ.
printf("%lld\n", res);
}